/*
 * Funkcijos darbui su išrikiuotu masyvu
 */
#ifndef ORDARRAY_H
#define ORDARRAY_H

/* Išrikiuoto masyvo elementai gali būti bet kokio tipo */
typedef void *type_t;

/* Predikatas turi grąžinti ne nulį jei pirmas argumentas
 * yra mažesnis nei antras, kitu atveju nulis
 * palyginimo funkcijos, aprašytos kitur */
typedef s8int (*lt_pred_t)(type_t , type_t );

/* Struktūra išrikiuoto masyvo */
typedef struct{
  type_t *array; /* Masyvas iš bet kokio tipo elementų, adresas */
  u32int size; /* Esamas užimtas dydis masyve */
  u32int max_size; /* Maksimalus dydis masyve */
  lt_pred_t lessthan; /* Masyvui priskirta funkcija palyginimamas */
} ord_arr_t;

/* Standartinė funkcija palyginimo */
s8int lt_predicate(type_t , type_t );

/* Funkcijos skirtos sukurti išrikiuotam masyvui */
/* Bus naudojama kai heap'as bus sukurtas */
ord_arr_t create_arr(u32int , lt_pred_t );
/* Kol heap'as nesukurtas, įrašinesim į nurodytą vietą */
ord_arr_t place_arr(void *, u32int , lt_pred_t );

/* Sunaikinti išrikiuota masyvą */
void remove_arr(ord_arr_t *);

/* Pridėti elementą į masyvą */
void insert_arr(type_t , ord_arr_t *);

/* Rasti elementą pagal indeksą */
type_t find_arr(u32int , ord_arr_t *);

/* Ištrinti elementą iš pasirinkto masyvo */
void remove_item(u32int , ord_arr_t *);
#endif /* ORDARRAY_H */
